/***************************************************************************
 * Input Point
 * -models a point in space used for user input
 * -in the case of the Kinect, it models a hand
 * -has coordinates, an id number, and a state associated with it
 *                                                                         
 ***************************************************************************/

#ifndef INPUTPOINT_H
#define INPUTPOINT_H

//enumerator for the different states a point could be it
enum InputState { SELECT_NE,
                  SELECT_NW,
                  SELECT_SE,
                  SELECT_SW,
                  SELECT_N,
                  SELECT_E,
                  SELECT_W,
                  SELECT_S,
                  SELECT_CENTER,
                  FREE_MOTION,
				  NULL_INPUT_STATE = -1};

//class def
class InputPoint {
public:
	//constructors
	InputPoint() {m_x = -1, m_y = -1, m_z = -1, m_id = -1;};
	~InputPoint() {};
	InputPoint(double x, double y, double z, int id, InputState state = FREE_MOTION) {m_x = x, m_y = y, m_z =z, m_id = id, m_state = state;};
	InputPoint(const InputPoint &p);

	//accessors
	double x() const {return m_x;};
	double y() const {return m_y;};
	double z() const {return m_z;};
	int id() const {return m_id;};
	int state() const {return m_state;};

	//mutators
	void setID(int id) {m_id = id;};
	void setState(InputState newstate) {m_state = newstate;};
	void setX(double x) {m_x = x;};
	void setY(double y) {m_y = y;};
	void setZ(double z) {m_z = z;};

private:
    int m_id;
    double m_x, m_y, m_z;
	int m_state;
};

#endif // INPUTPOINT_H
